package com.zlsy.secondtime.background;


import java.util.HashMap;
import java.util.Map;

/**
 * @author zhouliang
 * @date 2020/5/19 14:58
 * <p>
 * 演示发布和逸出
 */
public class MultiThreadsError3 {

    private Map<String, String> map;

    public MultiThreadsError3() {
        map = new HashMap<>();
        map.put("a", "1");
        map.put("b", "2");
        map.put("c", "3");
        map.put("d", "4");
        map.put("e", "5");
    }

    public Map<String, String> getStatus() {
        return map;
    }

    /**
     * 用副本代替真身，解决直接暴露对象出去被修改，导致逸出。
     * @return
     */
    public Map<String, String> getStatusUpgrade() {
        return new HashMap<>(map);
    }

    public static void main(String[] args) {
        MultiThreadsError3 multiThreadsError3 = new MultiThreadsError3();
        Map<String, String> status = multiThreadsError3.getStatus();
        String a = status.get("a");
        System.out.println(a);

        //当我们把一个private的map直接暴露出去的时候，别人就可以拿着这个map，把你里面的元素移除掉。这就是逸出。
        //我们既然声明这个map是private那么就是不希望别人能直接访问到这个map对象。
        status.remove("a");
        String a1 = status.get("a");
        System.out.println(a1);
    }
}
